package com.ftg.learn.execl.util;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * redis字符串序列化问题
 *
 * @author 布衣
 */
@Configuration
public class RedisKeySerializableUtil {

    /**
     * 配置 RedisTemplate 实例，设置其序列化方式
     *
     * @param redisConnectionFactory Redis 连接工厂，用于创建 Redis 连接
     * @return 配置好序列化方式的 RedisTemplate 实例
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        // 创建 RedisTemplate 实例
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        // 设置键的序列化方式为 StringRedisSerializer，将键序列化为字符串
        redisTemplate.setKeySerializer(new StringRedisSerializer());

        // 设置哈希表键的序列化方式为 StringRedisSerializer，将哈希表的键序列化为字符串
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        // 设置哈希表值的序列化方式为 StringRedisSerializer，将哈希表的值序列化为字符串
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());

        // 设置值的序列化方式为 JdkSerializationRedisSerializer，使用 JDK 序列化将值序列化为字节数组
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());

        // 设置 Redis 连接工厂，用于创建 Redis 连接
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        return redisTemplate;
    }


}
